home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / nethack.lha / nethack-3.1 / include / mkroom.h < prev    next >
C/C++ Source or Header  |  1993-01-17  |  4KB  |  101 lines

  1. /*    SCCS Id: @(#)mkroom.h    3.1    92/11/14    */
  2. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  3. /* NetHack may be freely redistributed.  See license for details. */
  4.  
  5. #ifndef MKROOM_H
  6. #define MKROOM_H
  7.  
  8. /* mkroom.h - types and structures for room and shop initialization */
  9.  
  10. struct mkroom {
  11.     schar lx,hx,ly,hy;    /* usually xchar, but hx may be -1 */
  12.     schar rtype;        /* Type of room (zoo, throne, etc...) */
  13.     schar rlit;        /* is the room lit ? */
  14.     schar doorct;        /* Door count */
  15.     schar fdoor;        /* Index for the first door of the room */
  16.     schar nsubrooms;    /* Number of subrooms */
  17.     boolean irregular;    /* true if room is non-rectangular */
  18.     struct mkroom *sbrooms[MAX_SUBROOMS];  /* Subrooms pointers */
  19.     struct monst *resident; /* priest/shopkeeper/guard for this room */
  20. };
  21.  
  22. struct shclass {
  23.     const char *name;    /* name of the shop type */
  24.     char    symb;        /* this identifies the shop type */
  25.     int    prob;        /* the shop type probability in % */
  26.     schar    shdist;        /* object placement type */
  27. #define D_SCATTER    0    /* normal placement */
  28. #define D_SHOP        1    /* shop-like placement */
  29. #define D_TEMPLE    2    /* temple-like placement */
  30.     struct itp {
  31.         int iprob;        /* probability of an item type */
  32.         int itype;    /* item type: if >=0 a class, if < 0 a specific item */
  33.     } iprobs[5];
  34.     const char **shknms;    /* list of shopkeeper names for this type */
  35. };
  36.  
  37. extern struct mkroom rooms[(MAXNROFROOMS+1)*2];
  38. extern struct mkroom* subrooms;
  39. /* the normal rooms on the current level are described in rooms[0..n] for
  40.  * some n<MAXNROFROOMS
  41.  * the vault, if any, is described by rooms[n+1]
  42.  * the next rooms entry has hx -1 as a flag
  43.  * there is at most one non-vault special room on a level
  44.  */
  45.  
  46. extern struct mkroom *dnstairs_room, *upstairs_room, *sstairs_room;
  47.  
  48. extern coord doors[DOORMAX];
  49.  
  50. /* values for rtype in the room definition structure */
  51. #define OROOM         0    /* ordinary room */
  52. #define COURT         2    /* contains a throne */
  53. #define SWAMP         3    /* contains pools */
  54. #define VAULT         4    /* contains piles of gold */
  55. #define BEEHIVE         5    /* contains killer bees and royal jelly */
  56. #define MORGUE         6    /* contains corpses, undead and ghosts */
  57. #define BARRACKS     7    /* contains soldiers and their gear */
  58. #define ZOO         8    /* floor covered with treasure and monsters */
  59. #define DELPHI         9    /* contains Oracle and peripherals */
  60. #define TEMPLE        10    /* contains a shrine */
  61. #define SHOPBASE    11    /* everything above this is a shop */
  62. #define ARMORSHOP    12    /* specific shop defines for level compiler */
  63. #define SCROLLSHOP    13
  64. #define POTIONSHOP    14
  65. #define WEAPONSHOP    15
  66. #define FOODSHOP    16
  67. #define RINGSHOP    17
  68. #define WANDSHOP    18
  69. #define TOOLSHOP    19
  70. #define BOOKSHOP    20
  71. #define UNIQUESHOP    21    /* shops here & above not randomly gen'd. */
  72. #define CANDLESHOP    21
  73. #define MAXRTYPE    21    /* maximum valid room type */
  74.  
  75. /* Special type for search_special() */
  76. #define ANY_TYPE    (-1)
  77. #define ANY_SHOP    (-2)
  78.  
  79. #define NO_ROOM        0    /* indicates lack of room-occupancy */
  80. #define SHARED        1    /* indicates normal shared boundary */
  81. #define SHARED_PLUS    2    /* indicates shared boundary - extra adjacent-
  82.                  * square searching required */
  83.  
  84. #define ROOMOFFSET    3    /*
  85.                  * (levl[x][y].roomno - ROOMOFFSET) gives
  86.                  * rooms[] index, for inside-squares and
  87.                  * non-shared boundaries.
  88.                  */
  89.  
  90. #define IS_ROOM_PTR(x)        ((x) >= rooms && (x) < rooms + MAXNROFROOMS)
  91. #define IS_ROOM_INDEX(x)    ((x) >= 0 && (x) < MAXNROFROOMS)
  92. #define IS_SUBROOM_PTR(x)    ((x) >= subrooms && \
  93.                  (x) < subrooms + MAXNROFROOMS)
  94. #define IS_SUBROOM_INDEX(x)    ((x) > MAXNROFROOMS && (x) < (MAXNROFROOMS*2))
  95. #define ROOM_INDEX(x)        ((x) - rooms)
  96. #define SUBROOM_INDEX(x)    ((x) - subrooms)
  97. #define IS_LAST_ROOM_PTR(x)    (ROOM_INDEX(x) == nroom)
  98. #define IS_LAST_SUBROOM_PTR(x)    (!nsubroom || SUBROOM_INDEX(x) == nsubroom)
  99.  
  100. #endif /* MKROOM_H */
  101.